package com.ssm.controller;

import com.ssm.entity.ImgData;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

@RestController
@RequestMapping("/xqcfile")
public class FileXqcController {
    private static final String IMG_ROOT_PATH = "upload";
    /**
     *  思路： 【1】接收参数
     *         【2】文件上传处理:  1.找到 在服务器中要存储的路径 ： tomcat  第三方【图片服务器】
     *                    2. 取新的名字 【防止同名的图片 多次上传】
     *                    3.将 上传过来 userimg  ==》【转换/拷贝】 ==》新文件上
     *          【3】对象存到数据库中。。。
     */
    @PostMapping("xqcupload")
    public Object fileUpload(MultipartFile file, HttpServletRequest request){
        //判断userimg是否为空
        String urlPath = null;
        if (file != null){
            //1.获取新的文件 (ALt+Shift+M)
            File newFile = getFile(file, request);

            // 2.将userimg拷贝为新文件
            try {
                file.transferTo(newFile);
            } catch (IOException e) {
                e.printStackTrace();
            }
            //3.获取 / 返回  图片路径
            urlPath = newFile.getAbsolutePath().substring(newFile.getAbsolutePath().indexOf(IMG_ROOT_PATH));
        }
        //3.将 用户名  图片路径？？  e:\\项目名\\upload /uuid.png
        Map<String,Object> tableData = new HashMap<String,Object>();
        tableData.put("code", 0);
        tableData.put("msg", "");
        tableData.put("data", new ImgData(urlPath));

        return tableData;
    }

    /**
     * 获取新的文件名
     * @param userimg
     * @param request
     * @return
     */
    private File getFile(MultipartFile userimg, HttpServletRequest request) {
        // 1.获取服务器上的真实路径（d:\\img\\  nginx）
        String realPath = request.getServletContext().getRealPath("/"+IMG_ROOT_PATH);
        // 2.查看真实路径是否存在
        File fileParent = new File(realPath);
        if (!fileParent.exists()){
            // 2.1路径不存在，自动创建
            fileParent.mkdirs();
        }
        // 3.UUID取名，唯一
        //新名字
        String fileName = UUID.randomUUID().toString().replace("-","");
        //加后缀
        String oldFileName = userimg.getOriginalFilename();//文件的名字
        String suffixName = oldFileName.substring(oldFileName.lastIndexOf("."));
        //拼接新的名字
        String newFileName = fileName+suffixName;
        //4.产生新的文件
        return new File(realPath+File.separator+newFileName);
    }


}
